package edu.upc.inmobiliaria.repository.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import edu.upc.inmobiliaria.domain.Usuario;
import edu.upc.inmobiliaria.repository.UsuarioRepository;

@Repository
public class JdbcUsuarioRepository implements UsuarioRepository {

	
	private SimpleJdbcTemplate simpleJdbcTemplate;
	
	@Autowired
	public JdbcUsuarioRepository(DataSource dataSource){
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}
	

	public Usuario buscarUsuario(String email) {
		Usuario user = null; 
		String sql = "select ID, EMAIL, NOMBRES, APE_PATERNO, APE_MATERNO from " +
			  " T_USUARIO where email = ?";
		 RowMapper<Usuario> mapper = new RowMapper<Usuario>() {  
			 public Usuario mapRow(ResultSet rs, int rowNum) throws SQLException {
				 Long id = rs.getLong("ID");
				 String email = rs.getString("EMAIL");
				 String nombres = rs.getString("NOMBRES");
				 String apePaterno = rs.getString("APE_PATERNO");
				 String apeMaterno = rs.getString("APE_MATERNO");
				 Usuario usuario = Usuario.crearUsuario(id, email, 
						 nombres, apePaterno, apeMaterno);
				 return usuario;
			 }
		 };
		 
		 try{
			 user = this.simpleJdbcTemplate.queryForObject(sql, mapper, email);
		 }catch(EmptyResultDataAccessException ex){
			 return null;
		 }
		 return user;
	}


	public void grabarUsuario(Usuario user) {
		String sql = "insert into T_USUARIO (ID, EMAIL, NOMBRES, APE_PATERNO, APE_MATERNO) "+
		   "values(?,?,?,?,?)";
		this.simpleJdbcTemplate.update(sql, user.getId(),
				user.getEmail(),
				user.getNombres(),
				user.getApePaterno(),
				user.getApeMaterno());
	}


	public Long obtenerIdDisponible() {		
		return this.simpleJdbcTemplate.queryForLong("select count(*)+1 from T_USUARIO");
	}

}
